/*
  1 在utils/api.js文件中，导入axios和BASE_URL
  2 调用axios.create()方法创建一个axios实例
  3 给create()方法，添加配置baseURL,值为:BASE_URL
  4 导出API对象
  5 导入API,使用API代替axios,去掉接口地址中的  http://localhost:3000
*/
import axios from 'axios'
import { BASE_URL } from './url'
import { getToken,removeToken } from './auth'

const API = axios.create({
    baseURL: BASE_URL
})

/*
  1 在 api.js 中，添加请求拦截器
  2 获取到当前请求的接口路径(url)
  3 判断接口路径，是否是以 /user 开头，并且不是登录或注册接口(只给需要的接口添加请求头)
  4 如果是，就添加请求头 Authorization
  5 添加响应拦截器
  6 判断返回值中的状态码
  7 如果时 400, 表示 token 超时或异常，直接一处 token
*/

// 添加请求拦截器
API.interceptors.request.use(config => {
  const { url } = config
  if(
    url.startsWith('/user') && 
    !url.startsWith('/user/login') && 
    !url.startsWith('/user/registered')
  ) {
    // 添加请求头
    config.headers.Authorization = getToken()
  }
  return config
})

// 添加响应拦截器
API.interceptors.request.use(response => {
  const { status } = response.data
  if (status === 400) {
    removeToken()
  }
  return response
})

export { API }